/**
 * 
 */
package org.yelongframework.servlet.mvc;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.yelongframework.servlet.http.HttpServletRequestSupport;

/**
 * 控制器。标识性接口
 * 
 * @since 1.0.0
 */
public interface Controller {

	// ==================================================请求响应==================================================

	/**
	 * @return 请求
	 */
	HttpServletRequest getRequest();

	/**
	 * @return 响应
	 */
	HttpServletResponse getResponse();

	// ==================================================请求参数==================================================

	/**
	 * @param name 名称
	 * @return 参数值
	 */
	default String getParameter(String name) {
		return getRequest().getParameter(name);
	}

	/**
	 * @param name         名称
	 * @param defaultValue 默认值
	 * @return 参数值
	 */
	default String getParameter(String name, String defaultValue) {
		return getRequestSupport().getParameter(getRequest(), name, defaultValue);
	}

	/**
	 * @param name 名称
	 * @return Integer类型参数值
	 */
	default Integer getParameterInteger(String name) {
		return getRequestSupport().getParameterInteger(getRequest(), name);
	}

	/**
	 * @param name         名称
	 * @param defaultValue 默认值
	 * @return Integer类型参数值
	 */
	default Integer getParameterInteger(String name, Integer defaultValue) {
		return getRequestSupport().getParameterInteger(getRequest(), name, defaultValue);
	}

	/**
	 * @param name 名称
	 * @return Long类型参数值
	 */
	default Long getParameterLong(String name) {
		return getRequestSupport().getParameterLong(getRequest(), name);
	}

	/**
	 * @param name         名称
	 * @param defaultValue 默认值
	 * @return Long类型参数值
	 */
	default Long getParameterLong(String name, Long defaultValue) {
		return getRequestSupport().getParameterLong(getRequest(), name, defaultValue);
	}

	/**
	 * @param name 名称
	 * @return Boolean类型参数值
	 */
	default Boolean getParameterBoolean(String name) {
		return getRequestSupport().getParameterBoolean(getRequest(), name);
	}

	/**
	 * @param name         名称
	 * @param defaultValue 默认值
	 * @return Boolean类型参数值
	 */
	default Boolean getParameterBoolean(String name, Boolean defaultValue) {
		return getRequestSupport().getParameterBoolean(getRequest(), name, defaultValue);
	}

	// ==================================================支持==================================================

	/**
	 * @return 请求支持
	 */
	HttpServletRequestSupport getRequestSupport();

}
